package icu.lingjie.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@Slf4j
public class ConfigUtil {

    /**
     * 世界的长宽高都是 2 的 n 次方，LOG2_X表示世界宽度X为 2 ** LOG2_X
     */
    public static int LOG2_X;

    public static int LOG2_Y;

    // 11111...11, X_MASK 是用来计算防止 x 越界的，使用时先 (x & 灵界长度X_MASK)
    public static int 灵界长度X_MASK;

    public static int 灵界宽度Y_MASK;

    public static int 灵界长度X;

    public static int 灵界宽度Y;

    // 地图文件在磁盘上的位置
    public static String 灵界地图文件;

    // 灵界的配置信息
    public static String 灵界配置文件;

    // 开启多少个线程
    public static int 线程数;

    // 器灵的保存目录
    public static String 器灵文件的目录;

    @Value("${lingjie.X.log2}")
    public void setLog2X(int log2X){
        LOG2_X = log2X;
    }

    @Value("${lingjie.Y.log2}")
    public void setLog2Y(int log2Y) {
        LOG2_Y = log2Y;
    }

    @Value("${lingjie.file}")
    public void setLingJieFileName(String str){
        灵界地图文件 = str;
    }

    @Value("${lingjie.config.file}")
    public void setLingJieConfigFileName(String str){
        灵界配置文件 = str;
    }

    @Value("${qiling.file.path}")
    public void setQiLingPath(String str) {
        器灵文件的目录 = str;
    }

    @Value("${lingjie.cpu.threadNum:4}")
    public void setThreadNum(int 线程数) {
        ConfigUtil.线程数 = 线程数;
    }

    @PostConstruct
    public void init(){
        // 灵界的长宽
        灵界长度X = 1 << LOG2_X;
        灵界宽度Y = 1 << LOG2_Y;
        灵界长度X_MASK = (1<<LOG2_X) - 1;
        灵界宽度Y_MASK = (1<<LOG2_Y) - 1;
    }
}
